package com.weighing.system.domain.server;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.weighing.system.utils.SerialNumberUtil;
import lombok.Data;

import java.util.List;

/**
 * 称重/下料单主表
 * 对应表名：CU_CZLLMain
 */
@Data
@TableName("CU_CZLLMain")
public class WeighingMaster implements Cloneable{

    /**
     * 单据编号
     */
    @TableId(value = "BillNo", type = IdType.INPUT)
    private String billNo;

    /**
     * 创建人
     */
    @TableField("CreatorId")
    private String creatorId;

    /**
     * 创建时间
     */
    @TableField("CreateTime")
    private Long createTime;

    /**
     * 最后修改人
     */
    @TableField("LastOperatorId")
    private String lastOperatorId;

    /**
     * 最后修改时间
     */
    @TableField("LastOperateTime")
    private Long lastOperateTime;

    /**
     * 备注
     */
    @TableField("Remark")
    private String remark;

    /**
     * 附件数量
     */
    @TableField("AttachementCount")
    private Short attachementCount;

    /**
     * 内部标识号
     */
    @TableField("InternalId")
    private Long internalId;

    /**
     * 是否有批注
     */
    @TableField("HasPostil")
    private Boolean hasPostil;

    /**
     * 打印次数
     */
    @TableField("TimesPrinted")
    private Short timesPrinted;

    /**
     * Email发送次数
     */
    @TableField("TimesEmailSend")
    private Short timesEmailSend;

    /**
     * 输出次数
     */
    @TableField("TimesExported")
    private Short timesExported;

    /**
     * 核准人
     */
    @TableField("PermitterId")
    private String permitterId;

    /**
     * 核准时间
     */
    @TableField("PermitTime")
    private Long permitTime;

    /**
     * 审核状态
     */
    @TableField("PermitState")
    private Byte permitState;

    /**
     * 流程状态
     */
    @TableField("FlowState")
    private Byte flowState;

    /**
     * 变更状态
     */
    @TableField("VaryState")
    private Byte varyState;

    /**
     * 抛转状态
     */
    @TableField("MergeOutState")
    private Byte mergeOutState;

    /**
     * 被用状态
     */
    @TableField("IsInUsed")
    private Boolean isInUsed;

    /**
     * 信息权限组
     */
    @TableField("AuthorizedId")
    private String authorizedId;

    /**
     * 单据日期
     */
    @TableField("BillDate")
    private Long billDate;

    /**
     * 单据类型（005 称重单，006 下料单）
     */
    @TableField("TypeId")
    private String typeId;

    /**
     * 当前状态
     */
    @TableField("CurrentState")
    private Byte currentState;

    /**
     * 结案人
     */
    @TableField("EndOperatorId")
    private String endOperatorId;

    /**
     * 结案时间
     */
    @TableField("EndTime")
    private Long endTime;

    /**
     * 核算组织
     */
    @TableField("FOrgId")
    private String fOrgId;

    /**
     * 公司
     */
    @TableField("CompId")
    private String compId;

    /**
     * 来源单种类
     */
    @TableField("FromSourceTag")
    private Integer fromSourceTag;

    /**
     * 流程配置编号
     */
    @TableField("FromTransId")
    private Long fromTransId;

    /**
     * 来源单号
     */
    @TableField("FromBillNo")
    private String fromBillNo;

    /**
     * 申请人员
     */
    @TableField("CU_PersonId")
    private String cuPersonId;

    /**
     * 申请部门
     */
    @TableField("CU_DeptId")
    private String cuDeptId;

    /**
     * 是否完成
     */
    @TableField("CU_IsFinished")
    private Boolean isFinished;

    /**
     * 明细
     */
    @TableField(exist = false)
    private List<WeighingDetail> details;

    /**
     * 工单信息
     */
    @TableField(exist = false)
//    @JsonManagedReference
    private ProduceOrder produceOrder;


    @Override
    public WeighingMaster clone() {
        try {
            return (WeighingMaster) super.clone();
        } catch (CloneNotSupportedException e) {
            throw new AssertionError();
        }
    }

//    /**
//     * 还原后的创建时间（自动加上8小时）
//     */
//    public Long getCreateTime() {
//        return SerialNumberUtil.restoreOriginalTimestamp(this.createTime);
//    }
//
//    /**
//     * 还原后的最后修改时间（自动加上8小时）
//     */
//    public Long getLastOperateTime() {
//        return SerialNumberUtil.restoreOriginalTimestamp(this.lastOperateTime);
//    }
//
//    /**
//     * 还原后的结案时间（自动加上8小时）
//     */
//    public Long getEndTime() {
//        return SerialNumberUtil.restoreOriginalTimestamp(this.endTime);
//    }
//
//
//    /**
//     * 还原后的核准时间（自动加上8小时）
//     */
//    public Long getPermitTime() {
//        return SerialNumberUtil.restoreOriginalTimestamp(this.permitTime);
//    }

}
